package com.dxf.chepter10

/**
 * 闭包:
 *  闭包就是一个函数和其它相关引用环境组合的一个整体(实体)
 *  通俗的讲  闭包就是一个对象  , 函数就是方法, 引用环境就是变量
 *
 *
 *   闭包好处:
 *     传入一次就在这个闭包中一直存在,可以反复使用
 *
 */
object T128_闭包 {

  def main(args: Array[String]): Unit = {

    def aaa(x: Int) = (y: Int) => x - y // 可以认为  (y: Int) => x - y 加上传入参数 x 构成一个闭包
    var f = aaa(20) // f就是一个闭包
    //多次调用f时,x=20 并不会改变
    println(f(1)) //19
    println(f(2)) //18


    val ms: String => String = makeSuffix(".jpg")
    println(ms("dog"))
    println(ms("cat.jpg"))
  }

   def makeSuffix(suffix: String) = {
      (x: String) => {
        if (x.endsWith(suffix)) x else x + suffix
      }


  }

}
